#include "plebe.h"
#include <iostream>
using namespace std;
void testPlebe();
void testLvalue();
void testRvalue();

int main_rvalue() {
    
    return 0;
}

// 右值引用的出现是为了告诉编译器什么时候需要拷贝，什么时候只是把控制权转移就行了
void testRvalue() {

    int n = 10;
    int && r1 = 100;
    using namespace std;
    cout << "r1的值:" << r1 << " 地址是:" << &r1 << endl;
    r1 = 800;
    cout << "r1的值:" << r1 << " 地址是:" << &r1 << endl;
    /*
    r1的值:100 地址是:0x16f2aeefc
    r1的值:800 地址是:0x16f2aeefc
    */
}
void testLvalue(){
    int n = 10;
    // 虽然这里被设置成了const，但是当它引用的数据变化时它还是会变化的
    const int &ln = n;
    n = 100;
    std::cout << "ln的数值是:"  << ln << std::endl;
}
void testPlebe() {
    // Plebe p1(10);
    // Plebe p2 = 12; //会调用只有一个int为参数的初始化函数
    // p1.showNum();
    // p2.showNum();
    double aDouble = 10.0;
    // 如果使用了explicit，那么必须使用显式的构造函数
    Plebe p3 = Plebe(aDouble);
    p3.showNum();
    string aString = p3;
    cout << "p3 to string " << aString << endl;
}